package com.asap.demo.model;

import java.io.Serializable;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.Map;

/**
 * @author E-mail:zhangcf@asiainfo.com
 * @version Create time：2015年4月7日 上午11:26:30
 * 类说明
 * 作为单个消息的封装类,主要存储解析前的Flume事件消息,与解析后的消息结构.
 * <p>
 * 1) originalBody 			存储: 由Flume采集的原始日志内容.
 * 2) headers					存储: 由Flume产生的附加消息头信息.
 * 3) parserFieldContent		存储: 解析后的消息字段内容列表. 采用LinkedHashMap作为有序的Map结构.
 */
public class Event implements Serializable {

    /**
     *
     */
    private static final long serialVersionUID = 8570933512746775189L;

    /**
     * 存放原始事件日志, 这个由AUS主程序赋值.
     */
    private Object originalBody;

    /**
     * 消息头对象, 这个由AUS主程序赋值.<br/>
     * headers KEY[0] id   作为存储主键id.<br/>
     * headers KEY[0] collectPro 采集协议:TCP,UDP.file....<br/>
     * headers KEY[1] sourceType 为前台定义的数据源类型,一般与解析类型形成多对一关系 <br/>
     * headers KEY[4] collectTime 采集时间:    格式:时间戳格式，long型 <br/>
     * headers KEY[5] equIP 采集主机地址: 被采集主机的IP地址 <br/>
     * headers KEY[6] filePath 采集路径:    被采集文件所在主机的路径<br/>
     * headers KEY[7] level 日志级别:    日志文件的级别<br/>
     */
    private Map<String, String> header = new HashMap<String, String>();

    /**
     * parserFieldContent: 事件解析后的字段内容列表. (采用:LinkedHashMap要求Map队列有序)
     * Key  : 代表字段名(采用Solr动态字段,一定要加类型标识,例如:String类型的address,KEY要写成:address_s)
     * Value: 代表字段值
     */
    private LinkedHashMap<String, String> parserFieldContent = new LinkedHashMap<String, String>();

    /**
     * collectionName,用来存储索引的索引库名称
     * 类说明:
     * 此项只是AUS产品用于指定存储至指定索引空间使用.与业务无关.
     */
    private String collectionName = "";

    /**
     * autoIncreaseMonth, 自动增长月份
     * 类说明:
     * 此项是用来控制每个事件中的Collection名称是否添加月份.默认是自动添加月份的.
     */
    private boolean autoIncreaseMonth = true;

    public String getCollectionName() {
        return collectionName;
    }

    public boolean isAutoIncreaseMonth() {
        return autoIncreaseMonth;
    }

    public void setAutoIncreaseMonth(boolean autoIncreaseMonth) {
        this.autoIncreaseMonth = autoIncreaseMonth;
    }

    public void setCollectionName(String collectionName) {
        this.collectionName = collectionName;
    }

    public Event() {

    }

    public Event(String msg) {
        originalBody = msg;
    }

    public Object getOriginalBody() {
        return originalBody;
    }

    public void setOriginalBody(Object originalBody) {
        this.originalBody = originalBody;
    }

    public static long getSerialversionuid() {
        return serialVersionUID;
    }

    public Map<String, String> getHeader() {
        return header;
    }

    public void setHeader(Map<String, String> header) {
        this.header = header;
    }

    /**
     * 获得解析后的字段内容列表
     *
     * @return 返回一个有序的多个字段内容列表.
     */
    public Map<String, String> getParserFieldContent() {
        return parserFieldContent;
    }

    /**
     * 解析原始消息内容后,必须设置字段内容列表
     *
     * @param parserFieldContent
     */
    public void setParserFieldContent(LinkedHashMap<String, String> parserFieldContent) {
        this.parserFieldContent = parserFieldContent;
    }

}
